home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / quartz / quartz10.lha / bin / MYCC_D < prev   
Text File  |  1990-04-29  |  6KB  |  401 lines

  1. #!/bin/sh
  2. #ident    "@(#)cfront:CC    1.20"
  3.  
  4. trap 'rm -f __err$$ $B$ISUF; exit' 1 2 3 15
  5. #
  6. installdirC=${installdirC-/usr/local/C++}
  7. installdirQ=${installdirQ-/u1/tom/FastThreads}
  8. #
  9. C=
  10. ccC=${ccC-atscc}
  11. CF=
  12. cfrontC=${cfrontC-${installdirC}/bin/cfront}
  13. CPLUS=-Dc_plusplus=1
  14. cppC=${cppC-/lib/cpp}
  15. CRT0=
  16. DASHR=
  17. E=0
  18. EE=0
  19. FON=
  20. G=0
  21. GF=
  22. GLIB=
  23. HLIST=
  24. I=${I-${installdirC}/incl}
  25. ISUF="..c"
  26. ldC=${ldC-ld}
  27. LIBRARY=${LIBRARY-${installdirC}/lib/libC.a}
  28. MCOUNT=${MCOUNT-${installdirQ}/lib/mcount.o}
  29. MON=
  30. munchC=${munchC-${installdirC}/bin/munch}
  31. MVLIST=
  32. NMFLAGS=${NMFLAGS-}
  33. O=
  34. OF=
  35. OO="a.out"
  36. OPTLIB=
  37. P=
  38. PLUSI=
  39. PON=
  40. PROFGCRT=${PROFGCRT-${installdirQ}/lib/crt0.o}
  41. PROFMCRT=${PROFMCRT-${installdirC}/lib/mcrt0++.o}
  42. PROFLIB=${PROFLIB-${installdirC}/lib/libC_p.a}
  43. R=
  44. SF=
  45. SUF=
  46. VERBOSE=
  47. X=
  48. Y=
  49. XON=
  50. Z=
  51. for A do
  52.     case $A in
  53.     +h*) HLIST="$HLIST `echo $A | sed 's/+h//'`"
  54.     ;;
  55.     +i) PLUSI=1
  56.     ;;
  57.     +V)    I="/usr/include"
  58.     O="$O $A"
  59.     ;;
  60.     +x)    XON=1
  61.     ;;
  62.     +*)    O="$O $A"
  63.     ;;
  64.     -c*)    CF=1
  65.      ;;
  66.     -C)    Y="$Y $A"
  67.     O="$O +C"
  68.     ;;
  69.     -D*)    Y="$Y $A"
  70.     ;;
  71.     -E)    PON=1
  72.     ;;
  73.     -F)    FON=1
  74.     ;;
  75.     -Fc)    FON=1
  76.     O="$O +L"
  77.     ;;
  78.     -g)    GF=-g
  79.     GLIB=-lg
  80.     ;;
  81.     -I*)    Y="$Y $A"
  82.     ;;
  83.     -l*) OPTLIB="$OPTLIB $A"
  84.     ;;
  85.     -M)    MON=1
  86.     PON=1
  87.     Y="$Y $A"    
  88.     ;;
  89.     -o*) if [ "$A" != "-o" ]
  90.     then
  91.           OO=`echo $A | sed 's/^-o//'`
  92.         A="-o $OO"
  93.     else
  94.         OX=1
  95.     fi
  96.     OF="$OF $A"
  97.     Z="$Z $A"
  98.     ;;
  99.     -O) P="$P $A"
  100.     ;;
  101.     -p)    P="$P $A"
  102.     CRT0=$PROFMCRT
  103.     ;;
  104.     -pg) P="$P $A"
  105.     CRT0=$PROFGCRT
  106.     ;;
  107.     -r)    DASHR=1
  108.     Z="$Z $A"
  109.     ;;
  110.     -S*)    SF=1
  111.     ;;
  112.     -U*)    Y="$Y $A"
  113.     ;;
  114.     -v)    VERBOSE=1
  115.     ;;
  116.     -Y) P="$P $A"
  117.     ;;
  118.     -.c)    echo "bad suffix option: -.c" 1>&2
  119.     ;;
  120.     -.*)    SUF=`expr "$A" : '-\(.*\)'`
  121.     ;;
  122.     *.c | *.C | *.cc)    if    test -f $A
  123.     then
  124.         WITHEXT=`basename $A ""`
  125.         B=`basename $A .C`
  126.         if test $B = $WITHEXT
  127.         then
  128.         B=`basename $A .cc`
  129.         fi
  130.         if test $B = $WITHEXT
  131.         then
  132.         B=`basename $A .c`
  133.         fi
  134.         if    test $PON
  135.         then
  136.         if test $SUF
  137.         then
  138.             if test $VERBOSE
  139.             then
  140.             echo "($cppC $Y  $CPLUS -I$I $A > $B$SUF)"
  141.             fi
  142.             $cppC $Y $CPLUS -I$I  $A >$B$SUF
  143.             E=$?
  144.         else
  145.             if test $VERBOSE
  146.             then
  147.             echo "($cppC $Y  $CPLUS -I$I $A)"
  148.             fi
  149.             $cppC $Y $CPLUS -I$I  $A
  150.             E=$?
  151.         fi
  152.         case $E in
  153.         0)    ;;
  154.         *)    G=0; break
  155.             ;;
  156.         esac
  157.         elif    test $FON
  158.         then
  159.         if test $SUF
  160.         then
  161.             if test $VERBOSE
  162.             then
  163.             echo "($cppC -C $Y  $CPLUS -I$I $A | $cfrontC +f$A $O > $B$SUF)"
  164.             fi
  165.             $cppC -C $Y $CPLUS -I$I  $A | $cfrontC +f$A $O > $B$SUF
  166.             E=$?
  167.         else    
  168.             if test $VERBOSE
  169.             then
  170.             echo "($cppC -C $Y  $CPLUS -I$I $A | $cfrontC +f$A $O)"
  171.             fi
  172.             $cppC -C $Y $CPLUS -I$I  $A | $cfrontC +f$A $O
  173.             E=$?
  174.         fi
  175.         case $E in
  176.         0)    ;;
  177.         *)    G=0; break
  178.             ;;
  179.         esac
  180.         else
  181.         if test $VERBOSE
  182.         then
  183.             echo "($cppC -C $Y $CPLUS -I$I $A | $cfrontC +L +f$A $O > $B$ISUF)"
  184.         fi
  185.         $cppC -C $Y $CPLUS -I$I  $A | $cfrontC +L +f$A $O > $B$ISUF
  186.         E=$?
  187.         R=1
  188.         C="$C $B$ISUF"
  189.         case $E in
  190.         0)    X="$X $B$ISUF"
  191.             Z="$Z $B.o"
  192.             MVLIST="$MVLIST $B"
  193.             G=1
  194.             ;;
  195.         127)    echo "Too many compilation errors" 1>&2
  196.             G=0
  197.             ;;
  198.         999)    echo "CC argument error" 1>&2
  199.             G=0
  200.             ;;
  201.         1)    echo "1 error" 1>&2
  202.             G=0
  203.             ;;
  204.         *)    echo "$E errors" 1>&2
  205.             G=0
  206.             ;;
  207.         esac
  208.         fi
  209.     else
  210.         echo "$A not found" 1>&2
  211.     fi
  212.     ;;
  213.     *.i)    if test $PON
  214.     then
  215.         if test $MON
  216.         then
  217.         echo "CC -M $A incompatible: ignoring $A" 1>&2
  218.         else
  219.         echo "CC -E $A incompatible: ignoring $A" 1>&2
  220.         fi
  221.     elif test $FON
  222.     then
  223.         echo "CC -F $A incompatible: ignoring $A" 1>&2
  224.       else    
  225.         B=`basename $A .i`
  226.         if test $VERBOSE
  227.         then
  228.         echo "($cfrontC +L +f$A $O < $A > $B$ISUF)"
  229.         fi
  230.         $cfrontC +L +f$A $O < $A > $B$ISUF
  231.         E=$?
  232.         R=1
  233.         C="$C $B$ISUF"
  234.         case $E in
  235.         0)    X="$X $B$ISUF"
  236.         Z="$Z $B.o"
  237.         MVLIST="$MVLIST $B"
  238.         G=1
  239.         ;;
  240.         *)    G=0
  241.         ;;
  242.         esac
  243.     fi
  244.     ;;
  245.     *)    if test $XON
  246.     then    
  247.         O="$O +x$A"
  248.         XON=""
  249.     else
  250.         Z="$Z $A"
  251.         if test $OX
  252.         then
  253.         OO=$A
  254.         OF="$OF $A"
  255.         OX=""
  256.         else
  257.         G=1
  258.         X="$X $A"
  259.         fi
  260.     fi
  261.     ;;
  262.     esac
  263. done
  264.  
  265. case $G in
  266. 0)    ;;
  267. *)                            # generate code
  268.     if test "$PLUSI"
  269.     then
  270.     # cc -g will emit C source line information relative to file..c.
  271.     # To allow dbx to use this C source line information, we
  272.     # delete C++ source line information here.
  273.     for f in $C
  274.     do
  275.         sed "/^#/d" $f > temp$$
  276.         mv temp$$ $f
  277.     done
  278.     fi
  279.     if test "$HLIST"            # +h: prepend Sequent asm macros
  280.     then
  281.     for f in $X
  282.     do
  283.         if test `echo $f | fgrep ..c`
  284.         then
  285.         cat $HLIST $f > temp$$
  286.         mv temp$$ $f
  287.         fi
  288.     done
  289.     fi
  290.     if test $SF                    # -S: generate .s files
  291.     then
  292.     if test $VERBOSE
  293.     then
  294.         echo "($ccC $GF $P -S $X)"
  295.     fi
  296.     $ccC $GF $P -S $X 
  297.     EE=$?
  298.     for A in $MVLIST
  299.     do
  300.         mv $A..s $A.s
  301.     done
  302.     elif test $CF                    # -c: skip link edit
  303.     then
  304.     if test $VERBOSE
  305.     then
  306.         echo "($ccC $GF $P -c $X)"
  307.     fi
  308.     $ccC $GF $P -c $X
  309.     EE=$?
  310.     for A in $MVLIST
  311.     do
  312.         mv $A..o $A.o
  313.     done
  314.     else
  315.     if test $VERBOSE
  316.     then
  317.         echo "($ccC $GF $P -c $X)"
  318.     fi
  319.     $ccC $GF $P -c $X                # compile, no load
  320.     EE=$?
  321.     for A in $MVLIST
  322.     do
  323.         mv $A..o $A.o
  324.     done
  325.     case $EE in
  326.     0)    if test $VERBOSE
  327.         then
  328.         echo "($ccC $GF $P $Z $OPTLIB $LIBRARY 2> __err$$)"
  329.         fi
  330.         $ccC $GF $P $Z $OPTLIB $LIBRARY 2> __err$$        # load
  331.         EE=$?
  332.         if test $EE != 0 -o -s __err$$
  333.         then
  334.         cat __err$$
  335.         elif test  "$DASHR" != 1        # find ctors/dtors
  336.         then
  337.         if test $VERBOSE
  338.         then
  339.             echo "(nm $NMFLAGS $OO | $munchC > __ctdt..c)"
  340.         fi
  341.         nm $NMFLAGS $OO | $munchC >__ctdt..c
  342.         case $? in
  343.         0)  if test $VERBOSE
  344.             then
  345.             echo "(relinking not necessary)"
  346.             fi
  347.             ;;
  348.         1)  if test $VERBOSE
  349.             then
  350.             echo "($ccC $GF $P -c __ctdt..c)"
  351.             fi
  352.             $ccC $GF $P -c __ctdt..c
  353.             if test $CRT0
  354.             then
  355.             if test $VERBOSE
  356.             then
  357.                 echo "($ldC -X $CRT0 $MCOUNT __ctdt..o $Z $OPTLIB $GLIB $PROFLIB -lc)"
  358.             fi
  359.             $ldC -X $CRT0 $MCOUNT __ctdt..o $Z $OPTLIB $GLIB $PROFLIB -lc # re-load
  360.             else
  361.             if test $VERBOSE
  362.             then
  363.                 echo "($ccC $GF $P __ctdt..o $Z $OPTLIB $LIBRARY)"
  364.             fi
  365.             $ccC $GF $P __ctdt..o $Z $OPTLIB $LIBRARY    # re-load
  366.             fi
  367.             rm __ctdt..o
  368.             EE=$?
  369.             ;;
  370.         esac
  371.         if test "$GF" = "-g"
  372.         then
  373.             if test $VERBOSE
  374.             then
  375.             echo "(Leaving __ctdt..c for debugging)"
  376.             fi
  377.         else
  378.             rm __ctdt..c
  379.         fi
  380.         fi
  381.         ;;
  382.     esac
  383.     rm __err$$
  384.     fi
  385. esac
  386.  
  387. if    test "$R" 
  388. then
  389.     if test ! "$PLUSI"
  390.     then
  391.     rm $C
  392.     fi
  393. fi
  394.  
  395. case $E in
  396. 0)    exit $EE
  397.     ;;
  398. *)    exit $E
  399. esac
  400.  
  401.